МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА кафедра «Захист інформації»
Звіт
про виконання лабораторної роботи №3
з дисципліни
" Криптографія і стеганографія "
ПОТОКОВІ ШИФРИ
Мета роботи – Ознайомитися з основними алгоритмами побудови генераторів псевдовипадкових послідовностей та лінійними регістрами зсуву з зворотнім зв’язком.
Завдання
Підготувати програму на об'єктно-орієнтованій мові програмування, яка реалізовуватиме потоковий шифр на основі генератора з кількома РЗЛЗЗ, об’єднаних нелінійним способом, використовуючи дані відповідно до індивідуального завдання (див. табл.1).
Таблиця 1
Варіант
Генератор
РЗЛЗЗ
Поліном Р(х)
Текст
9
WAKE
2 Фібоначчі
ПІБ
Теоретичні відомості
WAKE
WAKE - скорочення від Word Auio Key Encryption (Автоматичне шифрування слів ключем) - це алгоритм, придуманий Дэвидом Уилером (David Wheeler)[1589]. Він видає потік 32-бітових слів, які за допомогою XOR можуть бути використані для отримання шифротекста з відкритого тексту або відкритого тексту з шифротекста. Це швидкий алгоритм.
WAKE працює в режимі CFB, для генерації наступного слова ключа використовується попереднє слово шифротекста. Алгоритм також використовує S -блок з 256 32-бітовых значень. Цей S -блок має одну особливу властивість: Старший байт усіх елементів є перестановкою усіх можливих байтів, а 3 молодші байти випадкові.
Спочатку по ключу згенеруємо елементи S-блоку, Si. Потім проініціалізуєм чотири регістри з використанням того ж або іншого ключа : a0,b0,c0 і d0. Для генерації 32-бітового слова потоку ключів Ki .
Слово шифротекста Сі є XOR слова відкритого тексту Рi з Ki. Потім відновимо чотири регістра:
Функція M є
Знак >>означає звичайне, не циклічне зрушення управо. Молодші 8 бітів х+у є входом S -блоку.
Рис.1 WAKE
Найціннішою якістю WAKE є його швидкість. Проте він чутливий до розкриття з вибраним відкритим текстом або вибраним шифротекстом. Цей алгоритм використовувався в попередній версії антивірусної програми д-ра Соломона.
Регістр Фібоначчі.
Загальний вид рекурентного співвідношення, що визначає генератор Фібоначчі, задається рівнянням
,
де - параметри генератора; елемент представляє собою двійковий k-вектор і дія виконується покомпонентно.
Рис.4. Регістр зсуву з лінійним зворотнім зв’язком Фібоначчі
Приклад: рядок (32, 7, 5, 3, 2, 1, 0) означає, що якщо взяти 32-бітовий регістр зсуву і генерувати нові біти XOR-складанням тридцять другого, сьомого, п'ятого, третього, другого і першого бітів, то результуюча послідовність матиме максимальний період - вона пройде через 232 - 1 значень до того, як почне повторюватися.
РЗЛЗЗ в програмній реалізації працюють досить повільно, і швидкість можна збільшити застосуванням для програмування мови Асемблер замість Сі. Ще одне можливе рішення - запускати 16 РЗЛЗЗ (або 32, залежно від розміру слова в комп'ютері) у паралельному режимі. Така схема використовує масив слів, так що кожна бітова комірка регістру представлена окремим РЗЛЗЗ. При умові, що всі вони мають один і той же поліном зворотного зв'язку, така схема працює досить швидко. У загальному випадку найкращий спосіб оновлювати стани регістрів зсуву - це множити поточний стан на відповідні двійкові матриці.
Текст програми:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
class Program
{
static void Main(string[] args)
{
Lab3 m = new Lab3();
m.Laba();
}
}
class Lab3
{
public uint[] Fibinachi(uint[] Vhidnui, uint[] PochatDani, uint[] ZvorotniZviaz)
{
uint alfa = 0;
uint index = 0;
while (index < Vhidnui.Length)
{
alfa = 0;
for (int i = 0; i < PochatDani.Length; i++)
...